혼자 공부하는 바이브 코딩 — 8장 MCP로 클로드 코드의 한계 넘어서기 딥다이브 학습 노트
출처: 혼자 공부하는 바이브 코딩 with 클로드 코드 (조태호) | 참고: https://github.com/taehojo/vibecoding
8장에서 다루는 내용
- MCP의 개념과 클로드 코드 연결 — 외부 서비스와 AI를 연결하는 표준 프로토콜
- MCP로 완전 자동화 개발 환경 구축 — Playwright 테스트, Context7, 깃허브 MCP 연동
- 데이터베이스 연결해 진짜 서비스 만들기 — Vercel 배포, Supabase DB 연동
전체 흐름도
[08-1 MCP 이해 + 연결] [08-2 완전 자동화] [08-3 진짜 서비스]
| | |
v v v
+--------------------+ +------------------------+ +------------------------+
| MCP란? | | MCP 서버 찾기 | | Vercel 배포 |
| = AI 확장 표준 규약 | | * Context7 (문서 연결) | | = 깃허브 -> 자동 배포 |
| | | * Playwright (자동 테스트)| | |
| 원격 vs 로컬 MCP | | | | Supabase DB 연동 |
| 클라이언트-서버 모델 | | 쇼핑 리스트 앱 제작 | | = 클라우드 데이터베이스 |
| | | + Playwright 자동 테스트 | | |
| 노션 MCP 연동 | | | | 쇼핑 리스트 -> |
| Sequential Thinking| | 깃허브 MCP 연동 | | 진짜 서비스로 업그레이드 |
+--------------------+ | = 자동 커밋 + 푸시 | +------------------------+
+------------------------+
핵심 키워드
| 키워드 | 의미 |
|---|---|
| MCP | Model Context Protocol — AI가 외부 시스템과 연결할 때 사용하는 표준화된 통신 규약 |
| 클라이언트-서버 모델 | 클라이언트가 서버에 요청하고, 서버가 응답하는 구조 |
| 원격 MCP | 인터넷상 외부 서버에서 실행되는 MCP (예: 노션, 깃허브) |
| 로컬 MCP | 내 컴퓨터 안에서 직접 실행하는 MCP (예: Sequential Thinking) |
| Playwright | 웹 사이트를 자동으로 테스트하고 UI를 검증하는 브라우저 제어 도구 |
| Context7 | 클로드 코드가 항상 최신 문서를 참고하도록 돕는 지식 연결 MCP |
| Vercel | 깃허브에 코드를 올리면 자동으로 빌드하고 배포해 주는 클라우드 플랫폼 |
| Supabase | 데이터베이스 구축을 자동화해 주는 클라우드 데이터베이스 플랫폼 |
| 인증 | 외부 서비스와 MCP를 연결할 때 사용자가 허가된 사람인지 확인하는 절차 |
08-1 MCP 이해하고 클로드 코드와 연결하기
한 줄 요약
MCP는 AI가 외부 데이터, 도구, 서비스와 연결될 때 사용하는 표준 프로토콜이며, 클로드 코드에 MCP를 연결하면 능력을 무한히 확장할 수 있다.
MCP가 열어준 AI의 무한 확장 가능성
API vs MCP 비교:
API: 특정 서비스 하나의 대화 창구
웹 -> API -> API 서버
(하나의 서비스에 하나의 연결)
MCP: 다양한 데이터, 도구를 AI가 한꺼번에 관리하는 표준 규격
AI -> MCP -> MCP 서버들 (검색, DB, API...)
(하나의 표준으로 여러 서비스 연결)
- API: 특정 기능을 요청하는 방식. AI 모델이 파일 시스템을 직접 조작하거나 DB를 수정할 수 없음
- MCP: AI가 직접 파일 시스템에 접근하고, DB를 조회하거나 수정할 수 있게 해주는 프로토콜
- 클로드 코드는 이미 MCP 클라이언트 기능을 내장하고 있어 설정만 하면 바로 사용 가능
클라이언트-서버 모델
클로드 코드 MCP
| |
v v
[MCP 클라이언트] -> [MCP 서버 A] -> Search
-> [MCP 서버 B] -> Database
-> [MCP 서버 C] -> API
- 클로드 코드가 클라이언트로서 요청을 보내고, MCP 서버가 실제 작업을 처리
- 장점 1: 새로운 기능 추가 시 MCP 서버만 연결하면 됨 (쉬운 확장)
- 장점 2: 클로드 코드는 작업 지시만 하고 실행은 MCP 서버가 담당 (안정성)
- 주의: MCP 서버가 외부 파일이나 API에 접근하므로 보안 인증과 접근 권한 설정 필수
클로드 코드와 노션 연결하기 (실습)
MCP 서버 추가 3단계:
1. 터미널에서 claude mcp add 명령으로 MCP 서버 설치
2. 외부 서비스 연결 시 인증 과정 진행
3. 클로드 코드에서 해당 MCP 기능을 프롬프트로 사용
노션 MCP 설치 명령어:
> claude mcp add --transport http notion https://mcp.notion.com/mcp
설치 확인:
> /mcp (클로드 코드 안에서)
-> notion 서버가 "connected"로 표시되면 성공!
-> 15개의 도구(notion-search, notion-create-pages 등) 사용 가능
노션 MCP로 자동 리서치 노트 만들기
프롬프트:
"클로드 코드의 업데이트, 변경 사항을 검색하고 요약해 줘.
그 결과를 노션 MCP를 이용해 노션에 저장해 줘."
-> 클로드 코드가 자동으로:
1. 최신 업데이트를 검색
2. 내용을 요약
3. 노션에 문서를 생성하여 저장
로컬 MCP와 원격 MCP 이해하기
| 구분 | 로컬 MCP | 원격 MCP |
|---|---|---|
| 실행 위치 | 내 컴퓨터 안에서 직접 실행 | 인터넷상 외부 서버에서 실행 |
| 인터넷 | 불필요 (더 빠르고 안전) | 필수 |
| 설정 | 실행 명령어를 직접 지정 | URL만 입력하면 연결 |
| 적합한 상황 | 개인 작업, 보안 중시 | 팀 협업, 외부 서비스 연동 |
원격 MCP 설치 명령어 구조:
> claude mcp add --transport http [내가 정한 이름] [서버 URL]
로컬 MCP 설치 명령어 구조:
> claude mcp add [이름] -s local -- cmd /c npx -y @조직명/패키지명@버전
| | | | |
이름 범위지정 구분자 실행 패키지
로컬 MCP 설치 명령어 상세 해부
claude mcp add sequential-thinking -s local -- cmd /c npx -y
@modelcontextprotocol/server-sequential-thinking@latest
(1) sequential-thinking : MCP를 구분하기 위한 이름
(2) -s local : 현재 프로젝트에만 적용 (project, user도 가능)
(3) -- : 클로드 코드 옵션과 MCP 실행 명령의 구분자
(4) cmd /c : 윈도우에서 명령 실행 (맥/리눅스에서는 생략)
(5) npx -y : Node.js 패키지를 자동 설치 후 실행
(6) @modelcontextprotocol/server-sequential-thinking@latest : MCP 패키지명
Sequential Thinking MCP 활용
Sequential Thinking MCP란?
= 주어진 문제를 작은 단위로 분해해 순차적으로 추론하도록 돕는 도구
실습 프롬프트:
"내 웹 포트폴리오 방문자의 체류 시간을 지금의 2배로 늘리고 싶어.
두 가지 문서를 작성해.
1. 이 목표를 달성할 방법을 구성해서 노션 MCP를 이용해 '체류 시간 늘리기'로 저장해 줘.
2. Sequential Thinking MCP를 이용해서 이 목표를 달성할 방법을 체계적으로 구상하고
노션 MCP를 이용해 '체류 시간 늘리기 - 체계적 구상'으로 저장해 줘."
결과 비교:
- 일반 추론: 총 85줄
- 순차적 추론: 총 222줄 (목표, 실행 방법, 실행 로드맵, 측정 지표, 리스크 대응 등 상세)
핵심 체크포인트
- MCP = AI의 확장 플러그인 (레고 블록에 특별한 부품 추가하는 것)
- 클라이언트-서버 구조: 클로드 코드(클라이언트) -> MCP 서버(실제 작업 수행)
- 원격 MCP는 URL로 연결, 로컬 MCP는 실행 명령어로 연결
--구분자로 클로드 코드 옵션과 MCP 실행 명령을 분리
08-2 MCP로 구현하는 완전 자동화 개발 환경
한 줄 요약
Context7과 Playwright MCP로 최신 문서 참조와 자동 테스트를 구축하고, 깃허브 MCP로 버전 관리까지 자동화하는 완전 자동화 개발 환경을 만든다.
원하는 MCP를 찾는 방법
MCP 서버를 찾는 두 가지 효과적인 방법:
1. 구글 검색 — "Context7 MCP", "Playwright MCP" 등으로 검색
-> 깃허브 저장소에서 설치 방법 확인
2. 깃허브 저장소 탐색 — 대부분의 MCP가 오픈소스로 공개
-> README의 설치 안내를 따라 설치
TIP: 카테고리별로 분류해 비교 탐색할 수 있는 플랫폼도 참고
Context7 MCP — 최신 문서 연결 도구
Context7이란?
= AI 개발 툴이 항상 최신 문서를 참고하도록 돕는 지식 연결 도구
설치 과정:
1. context7.com에서 회원가입 + API 키 발급
2. 깃허브에서 설치 명령어 확인
(원격 또는 로컬 방식 선택 가능)
3. 클로드 코드에 설치
원격 설치 명령어:
> claude mcp add --transport http context7 https://mcp.context7.com/mcp
--header "CONTEXT7_API_KEY: ctx7sk-..."
Playwright MCP — 웹 자동 테스트 도구
Playwright란?
= 마이크로소프트가 만든 웹 애플리케이션 자동 테스트 도구
= 브라우저를 자동으로 열고, 버튼 클릭, 텍스트 입력, 결과 확인까지 수행
설치 명령어:
> claude mcp add playwright -s local -- cmd /c npx @playwright/mcp@latest
명령어 해부:
(1) claude mcp add : MCP 서버 추가 명령
(2) playwright : 설치할 MCP 이름
(3) npx : Node.js 패키지 실행
(4) @playwright/mcp@latest : Playwright MCP 패키지 최신 버전
쇼핑 리스트 앱 만들고 자동 테스트하기
Step 1: 쇼핑 리스트 앱 만들기
프롬프트: "쇼핑 리스트 앱을 만들어 줘. 아이템 추가, 삭제, 체크 기능이 있는
간단한 웹 UI로 로컬 브라우저에서 실행되게 해 줘."
-> shopping-list.html 파일 생성
Step 2: Playwright MCP로 자동 테스트
프롬프트: "Playwright MCP를 사용해서 이 쇼핑 리스트 앱의 모든 기능을
자동으로 테스트해 줘. 아이템 추가, 삭제, 체크 기능이
제대로 작동하는지 확인해 줘."
-> 클로드 코드가 Playwright MCP를 통해:
1. 브라우저 자동 실행 (HTML 파일 열기)
2. 입력창에 '사과' 입력 -> 추가 버튼 클릭
3. '우유', '빵' 등 추가 아이템 테스트
4. 체크박스 클릭 -> 취소 -> 재확인
5. 삭제 버튼 클릭 -> 아이템 제거 확인
6. 스크린샷 촬영 -> .playwright-mcp/ 폴더에 저장
깃허브 MCP로 프로젝트 영구 보관하기
깃허브 = 전 세계 코드 버전 관리 플랫폼
깃허브와 Git 명령어 이해하기:
작업공간 -> (add) -> 준비공간 -> (commit) -> 로컬 저장소 -> (push) -> 원격 저장소
<- (pull) <-
(1) 추가(add): 변경 파일을 준비 공간(staging area)에 올림
(2) 커밋(commit): 준비된 파일을 로컬 저장소에 보관 (변경 단위 기록)
(3) 푸시(push): 로컬 저장소의 커밋을 원격 저장소(깃허브)에 업로드
깃허브 MCP 설치
1. 깃허브 API 토큰 발급:
Settings -> Developer settings -> Personal access tokens (classic)
-> Generate new token (classic)
-> repo, user, project 권한 선택
-> 30일 유효기간 설정 -> 토큰 생성 및 복사
2. 깃허브 MCP 설치 명령어:
> claude mcp add --transport http github https://api.githubcopilot.com/mcp
-H "Authorization: Bearer <깃허브 API 토큰>"
3. 프로젝트 업로드 프롬프트:
"현재 폴더에 만들어진 쇼핑 리스트 앱을 깃허브에 저장하고 싶어.
github mcp를 사용해서 shopping-list-app이라는 저장소를 만들고 업로드해 줘."
-> 클로드 코드가 자동으로:
git init -> git add -> git commit -> git push 수행
핵심 체크포인트
- Context7 = 최신 문서 참조 MCP, Playwright = 웹 자동 테스트 MCP
- MCP 검색 방법: 구글 검색 + 깃허브 저장소 탐색
- Playwright가 브라우저를 자동 조작해 아이템 추가/삭제/체크 테스트 수행
- 깃허브 MCP로 add -> commit -> push 전 과정을 AI가 자동 처리
08-3 데이터베이스 연결해 진짜 서비스 만들기
한 줄 요약
Vercel로 웹 앱을 배포하고 Supabase로 데이터베이스를 연동하여, 로컬 환경의 쇼핑 리스트를 누구나 접속할 수 있는 진짜 서비스로 업그레이드한다.
배포(Deploy)란?
로컬 환경 (개발) 배포 후 (운영)
+--------------+ +------------------+
| 내 컴퓨터에서 | | 인터넷에 연결된 |
| 만 실행됨 | ->배포-> | 외부 서버에서 |
| 컴퓨터 꺼지면 | | 24시간 실행 |
| 앱도 종료 | | 누구나 URL로 접속 |
+--------------+ +------------------+
Vercel 계정 만들고 깃허브 연결하기
Vercel의 작업 흐름:
(1) 깃허브 저장소 준비
(2) 로컬 환경에서 작성한 HTML 파일을 깃허브에 푸시
(3) Vercel에 깃허브 인증 허가 후 배포할 저장소 선택
(4) 즉시 URL 발급 -> 누구나 접속 가능!
가입 절차:
1. vercel.com -> [Sign Up]
2. Plan Type: 개인 프로젝트 선택
3. [Continue with GitHub] -> 깃허브 계정 연동
4. Dashboard에서 [Add New] -> [Project]
5. Import Git Repository -> shopping-list-app 선택
6. [Deploy] 클릭 -> 자동 배포 완료!
404 Not Found 해결하기
문제: 배포 후 "404 Not Found" 오류 발생
원인: Vercel이 기본 시작 파일로 'index.html'을 찾는데,
쇼핑 리스트 앱은 'shopping-list.html'이라는 이름으로 만들었기 때문
해결 프롬프트:
"쇼핑 리스트 앱의 shopping-list.html 파일을 index.html로 수정해서
깃허브에 업로드해 줘."
-> 파일명 변경 후 깃허브에 커밋 + 푸시
-> Vercel이 자동으로 재배포
-> 정상 접속 확인!
로컬 스토리지의 한계
로컬 스토리지 (localStorage):
- 데이터가 해당 브라우저에만 저장됨
- 다른 컴퓨터, 다른 브라우저에서는 데이터 공유 불가
- 시크릿 모드에서는 빈 데이터만 표시
- 브라우저 캐시를 지우면 데이터 소멸
해결책: 클라우드 데이터베이스 (Supabase)
- 어디서나 동일한 데이터 접근 가능
- 여러 사용자 간 데이터 공유
- 서버가 데이터를 영구 보관
Supabase — 클라우드 데이터베이스 플랫폼
Supabase란?
= 데이터베이스 구축을 자동화해 주는 클라우드 DB 플랫폼
= 회원가입만 하면 별도 설치 없이 DB를 만들 수 있음
= API가 자동 생성되어 직접 서버 코드를 작성할 필요 없음
기존 방식 vs Supabase:
기존: Oracle/MySQL 설치 -> 서버 설정 -> 보수 관리 (복잡, 시간 소요)
Supabase: 가입 -> 프로젝트 생성 -> API 자동 제공 (간단, 즉시 사용)
Supabase 가입하고 조직 생성하기
1. supabase.com -> [Sign in] -> GitHub 계정으로 가입
2. [New organization] -> 조직 생성
- Name: HonGongVibeCoding's Org
- Type: Personal
- Plan: Free ($0/month) — 무료 플랜으로 프로젝트 2개까지
3. 프로젝트 자동 생성 -> 대시보드 진입
Supabase MCP 서버 설치와 API 토큰 발급
API 토큰 발급:
1. Supabase 시작 페이지 -> [Account preferences]
2. [Access Tokens] -> [Generate new token]
3. Name: my_first_project, 유효기간 30일 -> [Generate token]
4. 토큰 복사 후 안전한 곳에 저장
Supabase MCP 설치 명령어:
> claude mcp add supabase -s local -e SUPABASE_ACCESS_TOKEN=<토큰>
-- cmd /c npx -y @supabase/mcp-server-supabase@latest
명령어 해부:
- -e SUPABASE_ACCESS_TOKEN=<토큰> : 환경 변수로 API 토큰 전달 (-e는 --env 축약)
- @supabase : Supabase사가 만든 MCP 패키지
- mcp-server-supabase@latest : 최신 버전의 Supabase MCP 서버
쇼핑 리스트 앱 진짜 서비스로 업그레이드
프롬프트:
"Supabase mcp를 이용해서 우리의 쇼핑 리스트 앱을 데이터베이스와 연동해 줘.
shopping_items라는 테이블을 만들고,
현재 로컬 스토리지에 저장되던 데이터를 Supabase 데이터베이스에 저장하도록
코드를 수정해 줘. 수정이 완료되면 깃허브에 commit하고 push해 줘."
-> 클로드 코드가 자동으로:
1. Supabase에 "shopping-list-app" 프로젝트 생성
2. shopping_items 테이블 생성 (id, name, completed, created_at 열)
3. index.html 코드 수정: localStorage -> Supabase SDK 연동
4. 깃허브에 커밋 + 푸시
-> Vercel이 자동 재배포
-> 어떤 기기에서든 동일한 쇼핑 리스트 접근 가능!
데이터베이스 테이블 이해하기
데이터베이스의 테이블 = 엑셀 시트와 같은 구조
shopping_items 테이블 예시:
| id | name | completed | created_at |
|----|------|-----------|---------------------|
| 1 | 사과 | False | 2025-10-29 15:30:00 |
| 2 | 우유 | True | 2025-10-29 15:32:10 |
| 3 | 빵 | false | 2025-10-29 15:35:22 |
- 데이터베이스 = 여러 엑셀 파일을 관리하는 프로그램
- 테이블 = 데이터베이스 안에 있는 개별 엑셀 시트
데이터베이스 실시간 동기화 확인
테스트 과정:
1. 쇼핑 리스트 앱에서 '사과' 추가 -> Supabase Table Editor에서 행 추가 확인
2. 체크박스 클릭 -> completed 열이 TRUE로 변경
3. 아이템 삭제 -> Supabase 테이블에서도 행 삭제 확인
4. 다른 브라우저/시크릿 모드에서 접속 -> 동일한 데이터 확인!
전체 서비스 구조 완성:
쇼핑 리스트 앱 (index.html)
| Supabase SDK (API 통신)
Supabase 클라우드 DB (shopping_items 테이블)
| 자동 배포
Vercel (인터넷에 24시간 운영)
| 버전 관리
깃허브 (코드 저장소)
핵심 체크포인트
- Vercel = 깃허브 코드를 자동 빌드 + 배포하는 클라우드 플랫폼
- 로컬 스토리지는 해당 브라우저에만 데이터 저장 (다른 기기/브라우저에서 접근 불가)
- Supabase = 클라우드 DB 플랫폼 (가입만 하면 API 자동 생성)
- 쇼핑 리스트 앱이 localStorage -> Supabase DB로 업그레이드되어 진짜 서비스 완성
연습문제 풀이
Q1: MCP와 API의 차이점으로 가장 적절한 설명은?
A: API는 특정 기능을 요청하는 방식이고, MCP는 AI가 외부 시스템과 직접 소통하게 하는 프로토콜이다. MCP를 사용하면 AI가 직접 파일 시스템에 접근하고, 데이터베이스를 조회하거나 수정할 수 있다.
Q2: Playwright MCP가 테스트 완료 후 생성하는 폴더 이름은?
A:
.playwright-mcp폴더가 생성되며, 안에 스크린샷 파일이 저장된다. 이를 통해 테스트 결과를 기록하고 실제 화면을 보고할 때 유용하게 쓸 수 있다.
Q3: 깃허브에 코드를 업로드하는 순서는?
A: add -> commit -> push 순서이다. 먼저 변경 파일을 준비 공간에 추가(add)하고, 로컬 저장소에 보관(commit)한 뒤, 원격 저장소에 업로드(push)한다.
Q4: Vercel 배포 시 404 에러가 발생한 이유와 해결 방법은?
A: Vercel이 기본 시작 파일로 index.html을 찾는데, 앱 파일명이 shopping-list.html이었기 때문이다. 파일명을 index.html로 변경하면 해결된다.
Q5: 로컬 스토리지와 클라우드 데이터베이스의 가장 큰 차이점은?
A: 로컬 스토리지는 해당 브라우저에만 데이터가 저장되어 다른 기기에서 접근할 수 없지만, 클라우드 데이터베이스는 여러 기기에서 데이터를 공유할 수 있다.
부록 A: 용어 사전
| 용어 | 영문 | 의미 |
|---|---|---|
| MCP | Model Context Protocol | AI가 외부 시스템과 연결하는 표준 프로토콜 |
| 클라이언트-서버 모델 | Client-Server Model | 요청하는 쪽(클라이언트)과 응답하는 쪽(서버)의 구조 |
| 원격 MCP | Remote MCP | 인터넷상 외부 서버에서 실행되는 MCP |
| 로컬 MCP | Local MCP | 내 컴퓨터에서 직접 실행하는 MCP |
| 인증 | Authentication | 접속하려는 사용자가 허가된 사람인지 확인하는 절차 |
| Playwright | Playwright | 웹 애플리케이션의 UI를 자동으로 테스트하는 도구 |
| Context7 | Context7 | 최신 문서를 AI에 연결해 주는 지식 연결 도구 |
| Vercel | Vercel | 깃허브 코드를 자동 빌드/배포하는 클라우드 플랫폼 |
| Supabase | Supabase | 데이터베이스 구축을 자동화하는 클라우드 DB 플랫폼 |
| 배포 | Deploy | 애플리케이션을 외부 서버에 올려 운영하는 과정 |
| 클라우드 스토리지 | Cloud Storage | 인터넷에 연결된 외부 저장소 |
| 테이블 | Table | 데이터베이스에서 데이터를 표 형태로 저장한 구조 |
| Git | Git | 코드 변경 이력을 기록하고 관리하는 버전 관리 도구 |
| add/commit/push | add/commit/push | 깃의 핵심 작업 흐름: 준비 -> 저장 -> 업로드 |
부록 B: 핵심 비교표
| 항목 | 08-1 MCP 기초 | 08-2 자동화 | 08-3 진짜 서비스 |
|---|---|---|---|
| 핵심 도구 | 노션 MCP, Sequential Thinking | Context7, Playwright, 깃허브 MCP | Vercel, Supabase |
| 주요 역할 | 외부 서비스 연결 + 체계적 추론 | 자동 테스트 + 버전 관리 | 배포 + 데이터베이스 연동 |
| 결과물 | 노션 리서치 노트 자동 생성 | 쇼핑 리스트 앱 + 자동 테스트 | 누구나 접속 가능한 웹 서비스 |
| 항목 | 로컬 스토리지 | Supabase (클라우드 DB) |
|---|---|---|
| 데이터 위치 | 브라우저 안 | 클라우드 서버 |
| 여러 기기 공유 | 불가능 | 가능 |
| 브라우저 캐시 삭제 시 | 데이터 소멸 | 데이터 유지 |
| 시크릿 모드 | 빈 데이터 | 정상 접근 |
| 설정 난이도 | 매우 쉬움 | Supabase 가입 + MCP 설치 필요 |
부록 C: 추천 참고 자료 & 링크
| 자료 | 설명 |
|---|---|
| https://docs.claude.com/en/docs/mcp | 클로드 코드 MCP 공식 문서 |
| https://mcp.notion.com/mcp | 노션 MCP 서버 URL |
| https://www.context7.com | Context7 홈페이지 (API 키 발급) |
| https://github.com/microsoft/playwright-mcp | Playwright MCP 깃허브 저장소 |
| https://github.com/github/github-mcp-server | 깃허브 공식 MCP 서버 |
| https://www.vercel.com | Vercel 배포 플랫폼 |
| https://www.supabase.com | Supabase 클라우드 DB 플랫폼 |
| https://github.com/taehojo/vibecoding | 이 책의 예제 코드 |
클릭하거나 Space를 눌러 뒤집기